#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>

#define FILE_NAME1 "file1.txt"  // 文件已存在
#define FILE_NAME2 "file2.txt"  // 文件不存在

int main() 
{
    // 以只写形式打开，并清空文件中之前的数据
    int fd1 = open(FILE_NAME1, O_WRONLY | O_TRUNC); 

    // 创建文件并以只写形式打开，并指定文件的默认权限为0666(还受umask的影响)
    // 同时，可以通过umask接口手动设置当前进程的文件掩码，而不使用从父进程继承过来的umask
    umask(0000); 
    int fd2 = open(FILE_NAME2, O_WRONLY | O_CREAT | O_TRUNC, 0666);
    
    // 打开错误
    if(fd1 == -1 || fd2 == -1) 
    {
        perror("open");
        return 1;
    }

    const char* buf1 = "hello file1\n";
    const char* buf2 = "hello file2\n";

    int cnt = 5;
    while(cnt--) 
    {
        //注意：这里strlen求得的长度不用加1，因为字符串以'\0'结尾只是C语言的特性，而系统文件中并不这样规定
        write(fd1, buf1, strlen(buf1));
        write(fd2, buf2, strlen(buf2));
    }

    close(fd1);
    close(fd2);
}
